package com.fly.user.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.fly.common.request.user.AddUserRequest;
import com.fly.common.request.user.LoginRequest;
import com.fly.common.request.user.QueryUserPageRequest;
import com.fly.common.request.user.UpdateUserRequest;
import com.fly.common.vo.ResponseVO;
import com.fly.common.vo.order.UserOrderVO;
import com.fly.common.vo.user.JWT;
import com.fly.common.vo.user.UserVO;

import java.util.List;

/**
 * @description 用户业务接口
 * @author: fly
 * @date: 2018/11/20 14:35
 */
public interface UserService {

    /**
     * 获取用户信息根据用户主键
     *
     * @param userId 用户主键
     * @return 用户信息
     * @throws Exception 异常
     */
    UserVO queryUserById(Long userId) throws Exception;

    /**
     * 获取用户列表
     *
     * @return 用户列表
     * @throws Exception e
     */
    List<UserVO> queryUserList() throws Exception;

    /**
     * 分页获取用户信息
     *
     * @param request 分页请求对象
     * @return 用户信息
     */
    Page<UserVO> queryUserPage(QueryUserPageRequest request);

    /**
     * 新增用户
     *
     * @param request 用户信息
     */
    void addUser(AddUserRequest request);

    /**
     * 修改用户信息
     *
     * @param request 用户信息
     * @return 处理结果
     */
    ResponseVO updateUser(UpdateUserRequest request);

    /**
     * 删除用户信息
     *
     * @param userId 用户主键
     * @return 处理结果
     */
    void deleteUser(Long userId);

    /**
     * 测试批量数据操作，回滚
     *
     * @throws Exception 保存异常
     */
    void batchSaveUser() throws Exception;

    /**
     * 获取用户数量
     *
     * @return 用户数量
     */
    Long queryUserCount();

    /**
     * 根据主键获取用户信息
     *
     * @param userId 用户主键
     * @return 用户信息
     */
    UserVO findById(Long userId);

    /**
     * 注册
     *
     * @param request 用户信息
     */
    void register(AddUserRequest request) throws Exception;

    /**
     * 获取我的订单
     *
     * @param userId 用户主键
     * @return 我的订单
     */
    List<UserOrderVO> queryMyOrder(Long userId);
}
